/****************************************************************************
 * @file    : lin_api_appl.h
 * @author  : Nonosns MCU Team
 * @version : V2.0
 * @Date    : 2023/4/7
 * @brief   : lin stack file
 * @note
 * Copyright (C) 2023 Novosense All rights reserved.
 ****************************************************************************/
#ifndef LIN_API_APPL_H
#define LIN_API_APPL_H

/*******************************************************************************
 * Include files
 *******************************************************************************/
#include "lin_api.h"

/*******************************************************************************
  type definitions
*******************************************************************************/

/*******************************************************************************
  definitions
*******************************************************************************/

/*******************************************************************************
  global variables
*******************************************************************************/

/*******************************************************************************
  prototypes of LIN API application specific functions
*******************************************************************************/
// templates that can be replaced by application specific functions

#ifdef DEBUG
l_bool l_bool_rd_sss(void);
l_u8 l_u8_rd_sss(void);
void l_bool_wr_sss(l_bool v);
void l_u8_wr_sss(l_u8 v);
void l_u16_wr_sss(l_u16 v);
void l_bytes_rd_sss(l_u8 start, l_u8 count, l_u8 *const data);
void l_bytes_wr_sss(l_u8 start, l_u8 count, const l_u8 *const data);
l_bool l_flg_tst_fff(void);
void l_flg_clr_fff(void);
#endif
enum WorkMode
{
  NORMAL,
  MANUAL,
  LEARN
};
typedef struct
{
  enum WorkMode Mode;
  u8 u8Command;
  s16 s16Parameter1;
  s16 s16Patameter2;
  u8 u8Reserve;
  u8 u8Crc;
} Command_t;
//  functions that have to be adapted to the application
void l_flg_set_update_flags(l_u8 *frame_array);

l_bool l_flg_tst_LED(void);
void l_flg_clr_LED(void);
l_u8 l_u8_rd_LED(void);

l_bool l_flg_tst_Motor(void);
void l_flg_clr_Motor(void);
Command_t t_rd_Command(void);

l_bool l_flg_tst_key_state(void);
void l_flg_clr_key_state(void);
void l_u8_wr_key_state(l_u8 v);

void l_get_motor_pos_fault(void);

#endif /* LIN_API_APPL_H  */
